Статья является продолжением статьи PHPUnit + Selenium2. Часть 1. Быстрый старт. Авторизация на mail.ru.

Немного теории.

Для тестирования, например авторизации, проверяют все состояния этой формы (введенные данные, пустые, неверные и т.д.). Мы остановимся на некоторых из них. Обычно, если ввели пустое или неправильное значение - html форма должна показать сообщение об ошибке, при тестировании мы проверяем эти сообщения.

Так же, в процессе тестирования, обычно, проверяются данные на наличие или отсутствия чего-то (пустое значение или нет, соответствует ли оно чему-то, является ли булевым и т.д.). В PHPUnit этим занимаются функции, имена которых начинаются со слова assert (здесь можно узнать об этих функциях) например:

/**
 Проверяем, соответствует ли значение переменной testString слову 'Hello Word'
*/
$this->assertEquals($testString, 'Hello Word');

такие функции, возвращают в консоль, после выполнения тестирования, информацию например,

если тест не прошел (т.е. в одной из функций assert [в данном случае, во второй]
значение не соответствует предполагаемому):

FAILURES!
Tests: 1, Assertions: 2, Failures: 1.

или если, тест прошел успешно, может выводится такой результат

.                                                                   1 / 1 (100%)
Time: 5.47 seconds, Memory: 3.50MB
OK (1 test, 3 assertions)

Задача

  1. Проверить, правильно ли выводятся ошибки при попытке авторизироваться на сайте с пустыми полями логина и пароля
  2. Проверяем, вывод ошибок при вводе неправильного пароля
  3. Проверяем, что мы успешно авторизировались

Пишем код

Мы можем создать новый класс MailRuValidateTest c именем файла MailRuValidateTest.php

<?php

/**
 * Class MailRuTest
 * Тестирование валидации при авторизации на сайте mail.ru
 */
class MailRuValidateTest extends PHPUnit_Extensions_Selenium2TestCase
{

    private $login  = 'ваш логин';
    private $password = 'ваш пароль';

    /**
     * Базовые настройки. Выполняются один раз
     */
    protected function setUp()
    {
        $this->setBrowser('firefox');
        $this->setBrowserUrl('https://mail.ru');
    }

    public function testAuth()
    {
        /**
         * Проверяем авторизацию спустым занчением полей логина и пароля
         */
        $this->auth('', '');
        sleep(2);

        /**
         * Переменная, которая будет содержать найденные ошибки
         */
        $errorsValues = null;

        /**
         * Ищем элементы, которые имеют класс b-form-field__errors__error_visible
         */
        $items = $this->elements($this->using('css selector')
                      ->value('.b-form-field__errors__error_visible'));

        /**
         * Убеждаемся, что мы нашли элементы с текстами ошибок
         */
        $this->assertEquals(2, count($items));

        /**
         * Проверяем сообщения об ошибке логина и пароля
         */
        $this->assertEquals($items[0]->text(), "Поле «Логин» должно быть заполнено");
        $this->assertEquals($items[1]->text(), "Поле «Пароль» должно быть заполнено");

        /**
         * Проверяем валидацию с неправильным паролем
         */
        $this->auth($this->login, uniqid());
        sleep(2);

        /**
         * Переменная, для хранения сообщения об ошибке при вводе неправильного пароля
         */
        $errorWrongPasswordMessage = '';

        /**
          Пытаемся найти HTML элемент, который содержит сообщение об ошибке        
        */
        try {
            $errorWrongPasswordMessage = $this->byClassName('b-login__errors')->text();
        } catch (PHPUnit_Extensions_Selenium2TestCase_WebDriverException $e) {
        }

        /**
         * Проверяем сообщение об ошибке при неправильном пароле
         */
        $this->assertEquals($errorWrongPasswordMessage, 
         "Неверное имя пользователя или пароль. Проверьте правильность введенных данных.");

        /**
          Авторизируемся с реальным логином и паролем            
        */
        $this->auth($this->login, $this->password);
        sleep(2);

        /**
         * Проверяем, что мы авторизировались. У нас должен быть элемент title, 
           который должен содержать текст "Воходящие"
         */
         $inbox = $this->byTag('title')->text();
         $this->assertTrue(strpos($inbox, 'Входящие') >= 0);

    }

    protected function auth($login, $password)
    {
        $this->url('https://account.mail.ru/login');
        $this->byName('Username')->value($login);
        $this->byName('Password')->value($password);

        /**
         * Если у вашего почтового ящика домен не mail.ru, а, скажем inbox.ru
         * Выбираем домен из выпадающего списка.
         * Для этог, раскомментируйте код ниже
         */

        /**
        $this->byClassName("b-dropdown__ctrl")->click();
        $this->byCssSelector("a[data-value=\"inbox.ru\"]")->click();
         */

        $this->byClassName('b-login__submit-btn')->submit();
    }
}

Выполеняем тест

php vendor/phpunit/phpunit/phpunit MailRuValidateTest.php